package com.demo.java.OD601_650.OD629;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【优雅子数组(A卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146897520
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);

        // 读取数组长度 A 和出现次数的最小值 k
        int A = in.nextInt();
        int k = in.nextInt();

        // 读取数组 Q
        int[] nums = new int[A];
        for (int i = 0; i < A; i++) {
            nums[i] = in.nextInt();
        }

        // 记录符合条件的子数组数量
        int result = 0;

        // 定义滑动窗口的左右指针
        int left = 0;
        int right = 0;

        // 使用 HashMap 来存储当前窗口内每个元素的频率
        HashMap<Integer, Integer> num_count = new HashMap<>();

        // 滑动窗口
        while (left < A && right < A) {
            // 获取当前窗口右端的元素
            Integer c = nums[right];

            // 更新窗口内元素的频率
            num_count.put(c, num_count.getOrDefault(c, 0) + 1);

            // 如果某个元素的频率大于等于 k，更新结果
            if (num_count.get(c) >= k) {
                // 计算当前窗口内符合条件的所有子数组的个数
                result += A - right;

                // 收缩窗口，移动左指针
                num_count.put(nums[left], num_count.get(nums[left]) - 1);
                left++;

                // 调整右指针元素的频率
                num_count.put(c, num_count.get(c) - 1);
                right--;
            }

            // 扩展窗口，移动右指针
            right++;
        }

        // 输出符合条件的子数组数量
        System.out.println(result);
    }
}